package kr.hkit.powerjava.chapter23;


class Counter {
	private int value ; 
	public synchronized void increment() {value++;}
	public synchronized void decrement() {value--;}
	public synchronized void prnCounter() {System.out.println(value);}
}

class SharedThread extends Thread {
	Counter sharedCounter;

	public SharedThread(Counter sharedCounter) {
		this.sharedCounter = sharedCounter;
		start();
	}
	
	@Override
	public void run() {
		int i = 0;
		while (i < 20000) {
			sharedCounter.increment(); // counter의 value값을 1증가
			sharedCounter.decrement(); // counter의 value값을 1감소

			if (i % 40 == 0) {
				sharedCounter.prnCounter();
				try {
					sleep((int)(Math.random() * 2));
				} catch (InterruptedException e) {}
			}i++;
		}
	}
}

public class CounterTest {
		public static void main(String[] args) {
			Counter c = new Counter();
			
			new SharedThread(c); //start 위에서 호출
			new SharedThread(c);
			new SharedThread(c);
			new SharedThread(c); //각각 스레드가 c공유 

		}
}
